package com.leet.code.simple_array;

/**
 * @description:    999.可以被一步捕获的棋子数
 * 首先找到车的具体位置，并将其位置保存下来
 * 然后根据车的具体位置寻找与车同一行或者同一列里面是否有不被象隔开的黑色棋子，如果有，那么结果就加一，直到遍历完同一行以及同一列的所有数组以后即可。
 * 在其中使用flag标志标识在黑色棋子之前有没有遇到白象，如果遇到标志位就是false，没有则为true
 * 在遇到黑色棋子时，只有当标志位为true时，结果才加一，此时标志位也要置为false，因为黑棋就隔开了车和下个黑棋(此时直接跳出循环也可，只是目前棋盘大小只有8，即使不跳出对速度影响也不大)
 *
 * 最终返回结果即可
 * @author: WYG
 * @time: 2020/12/2 9:07
 */

public class NumRookCaptures {
    public int numRookCaptures(char[][] board) {
        int res = 0;
        int a = 0;
        int b = 0;
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                if (board[i][j] == 'R') {
                    a = i;
                    b = j;
                    break;
                }
            }
        }
        boolean flag = true;
        for (int i = b + 1; i < 8; i++) {
            if (board[a][i] == 'B') flag = false;
            if (board[a][i]=='p' && flag) {
                res++;
                flag = false;
            }
        }
        flag = true;
        for (int i = b - 1; i >= 0; i--) {
            if (board[a][i] == 'B') flag = false;
            if (board[a][i]=='p' && flag) {
                res++;
                flag = false;
            }
        }
        flag = true;
        for (int i = a + 1; i < 8; i++) {
            if (board[i][b] == 'B') flag = false;
            if (board[i][b]=='p' && flag) {
                res++;
                flag = false;
            }
        }
        flag = true;
        for (int i = a - 1; i >= 0; i--) {
            if (board[i][b] == 'B') flag = false;
            if (board[i][b]=='p' && flag) {
                res++;
                flag = false;
            }
        }
        return res;
    }
}
